home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / dev / src / boot.s < prev    next >
Text File  |  1992-10-06  |  7KB  |  437 lines

  1. org  $40000
  2. load $40000
  3.  
  4. RASTER = $ff
  5. BEGIN = 90
  6.  
  7. WIDTH = 20
  8. HIGH = 150
  9.  
  10. Xc = [WIDTH*4]
  11. Yc = [HIGH/2]
  12. SIZE = WIDTH*HIGH
  13. DEEP = 3
  14.  
  15. BASE = $0007
  16. BPL1 = $0000
  17. BPL2 = BPL1 + SIZE
  18. BPL3 = BPL2 + SIZE
  19. DATA = $7ff00
  20.  
  21. D = 720
  22. K = 240
  23.  
  24. C = 126
  25.  
  26. ;------------------------------------------------------------------------
  27.  
  28. START:        dc.b    'DOS',0
  29.         dc.l    0
  30.         dc.l    880
  31.  
  32.         movem.l    a0-a6/d0-d7,-(sp)
  33.  
  34.         clr.l    36(a1)
  35.         move.w    #9,28(a1)
  36.         jsr    -456(a6)
  37.  
  38.         lea    GFX(pc),a1
  39.         jsr    -408(a6)
  40.         move.l    d0,a0
  41.         move.l    $26(a0),-(sp)
  42.         move.w    #'do',5(a1)
  43.  
  44.         lea     $dff000,a6
  45.         lea    COPPER(pc),a0
  46.         move.w    #$7fff,$96(a6)
  47.         move.l    a0,$80(a6)
  48.         clr.w    $88(a6)
  49.         move.w    #$83c0,$96(a6)
  50.  
  51.         lea    DATA,a5
  52.         moveq    #BASE,d0
  53.         swap    d0
  54.         move.l    d0,(a5)
  55.  
  56. LOOP:        bsr.s    FLIP
  57.         bsr    CLS
  58.         bsr    CUBE
  59.         bsr.s    FILL
  60.         btst    #6,$bfe001
  61.         bne.s    LOOP
  62.  
  63.         bsr    BLT
  64.         move.l    (sp)+,$80(a6)
  65.         clr.w    $88(a6)
  66.         clr.w    $100(a6)
  67.         move.w    #$83f0,$96(a6)
  68.  
  69.         movem.l    (sp)+,a0-a6/d0-d7
  70.         lea    DOS(pc),a1
  71.         jsr    -96(a6)
  72.         move.l    d0,a0
  73.         move.l    22(a0),a0
  74.         moveq    #0,d0
  75.         rts
  76.  
  77. ;------------------------------------------------------------------------
  78.  
  79. FLIP:        cmpi.b    #RASTER,$6(a6)
  80.         bne.s    FLIP
  81.         move.l    (a5),d0
  82.         move.w    #SIZE,d1
  83.         lea    LIST(pc),a0
  84.         move.w    d0,(a0)
  85.         add.w    d1,d0
  86.         move.w    d0,4(a0)
  87.         add.w    d1,d0
  88.         move.w    d0,8(a0)
  89.         add.w    d1,d0
  90.         cmpi.w    #[SIZE*DEEP]*3,d0
  91.         bne.s    FLIP1
  92.         clr.w    d0
  93. FLIP1:        move.l    d0,(a5)
  94.         rts
  95.  
  96. ;------------------------------------------------------------------------
  97.  
  98. FILL:        move.l    (a5),d0
  99.         addi.w    #[SIZE*DEEP]-2,d0
  100.         move.l    #$09f0000a,d1
  101.         bra.s    BLITTER
  102.  
  103. CLS:        move.l    (a5),d0
  104.         addi.w    #[SIZE*DEEP],d0
  105.         cmpi.w    #[SIZE*DEEP]*3,d0
  106.         bne.s    CLS1
  107.         clr.w    d0
  108. CLS1:        move.l    #$01000000,d1
  109.  
  110. BLITTER:    bsr.s    BLT
  111.         move.l    d0,$50(a6)
  112.         move.l    d0,$54(a6)
  113.         clr.l    $64(a6)
  114.         move.l    d1,$40(a6)
  115.         move.w    #[DEEP*HIGH*64]+[WIDTH/2],$58(a6)
  116.         rts
  117.  
  118. ;------------------------------------------------------------------------
  119.  
  120. BLT:        btst    #6,$2(a6)
  121.         bne.s    BLT
  122.         rts
  123.  
  124. ;------------------------------------------------------------------------
  125.  
  126. ; d0        reserved
  127.  
  128. LINEINIT:    bsr.s    BLT
  129.         moveq    #-1,d0
  130.         move.l    d0,$44(a6)
  131.         move.w    #$8000,d0
  132.         move.l    d0,$72(a6)
  133.         rts
  134.  
  135. ; d0-d1    :    (x1,y1)
  136. ; d2-d3    :    (x2,y2)
  137. ; d4-d5    :    reserved
  138. ; a0    :    screen
  139.  
  140. LINEDRAW:    cmp.w    d1,d3
  141.         bne.s    LINE1
  142.         rts
  143. LINE1:        blt.s    LINE2
  144.         exg    d2,d0
  145.         exg    d3,d1
  146. LINE2:        addq.w    #1,d3
  147.         moveq    #0,d4
  148.         sub.w    d1,d3
  149.         bpl.s    LINE3
  150.         neg.w    d3
  151.         bra.s    LINE4
  152. LINE3:        ori.b    #1,d4
  153. LINE4:        sub.w    d0,d2
  154.         bpl.s    LINE5
  155.         neg.w    d2
  156.         bra.s    LINE6
  157. LINE5:        ori.b    #2,d4
  158. LINE6:        move.w    d2,d5
  159.         sub.w    d3,d5
  160.         bpl.s    LINE7
  161.         exg    d3,d2
  162.         bra.s    LINE8
  163. LINE7:        ori.b    #4,d4
  164. LINE8:        ror.w    #4,d0
  165.         ori.w    #$0b00,d0
  166.         moveq    #0,d5
  167.         move.b    d0,d5
  168.         add.w    d5,d5
  169.         move.b    #$4a,d0
  170.         mulu    #WIDTH,d1
  171.         add.w    d5,d1
  172.         add.w    d1,a0
  173.         move.b    TABLE(pc,d4.w),d4
  174.         add.w    d3,d3
  175.         bsr.s    BLT
  176.         move.w    d3,$62(a6)
  177.         sub.w    d2,d3
  178.         bpl.s    LINE9
  179.         ori.b    #$42,d4
  180. LINE9:        move.w    d4,$42(a6)
  181.         move.l    d3,$50(a6)
  182.         sub.w    d2,d3
  183.         move.w    d3,$64(a6)
  184.         move.w    d0,$40(a6)
  185.         move.l    a0,$48(a6)
  186.         move.l    a0,$54(a6)
  187.         moveq    #WIDTH,d0
  188.         move.w    d0,$60(a6)
  189.         move.w    d0,$66(a6)
  190.         asl.w    #6,d2
  191.         addi.w    #64+2,d2
  192.         move.w    d2,$58(a6)
  193.         rts
  194.  
  195. TABLE:        dc.b    15,11,07,03,31,23,27,19
  196.  
  197. ;------------------------------------------------------------------------
  198.  
  199. ; d0-d2        (x,y,z)
  200. ; d3        sin
  201. ; d4        cos
  202. ; d5-d6        reserved
  203. ; a0        sin table
  204.  
  205. ROTATION:    lea    SINUS(pc),a0
  206.         move.b    Alpha-DATA(a5),d5
  207.         bsr.s    ROTATION1
  208.         move.b    Beta-DATA(a5),d5
  209.         bsr.s    ROTATION1
  210.         move.b    Gamma-DATA(a5),d5
  211.  
  212. ROTATION1:    bsr.s    ROTATION2
  213.         move.w    d6,d3
  214.         addi.b    #$40,d5
  215.         bsr.s    ROTATION2
  216.         move.w    d6,d4
  217.  
  218.         move.w    d0,d5
  219.         move.w    d1,d6
  220.         muls    d4,d5
  221.         muls    d3,d6
  222.         add.l    d5,d6
  223.         asr.l    #8,d6
  224.         move.w    d0,d5
  225.         move.w    d6,d0
  226.         move.w    d1,d6
  227.         muls    d3,d5
  228.         muls    d4,d6
  229.         sub.l    d5,d6
  230.         asr.l    #8,d6
  231.         move.w    d6,d1
  232.         exg    d1,d2
  233.         exg    d0,d1
  234.         rts
  235.  
  236. ROTATION2:    move.b    d5,d6
  237.         andi.w    #$007f,d6
  238.         move.b    (a0,d6.w),d6
  239.         tst.b    d5
  240.         bpl.s    ROTATION3
  241.         neg.w    d6
  242. ROTATION3:    rts
  243.  
  244. SINUS:        dc.b    0,6,12,18,25,31,37,43,49,56,62,68,74,80,86,92,97
  245.         dc.b    103,109,115,120,126,131,136,142,147,152,157,162
  246.         dc.b    167,171,176,181,185,189,193,197,201,205,209,212
  247.         dc.b    216,219,222,225,228,231,234,236,238,241,243,244
  248.         dc.b    246,248,249,251,252,253,254,254,255,255,255,255
  249.         dc.b    255,255,255,254,254,253,252,251,249,248,246,244
  250.         dc.b    243,241,238,236,234,231,228,225,222,219,216,212
  251.         dc.b    209,205,201,197,193,189,185,181,176,171,167,162
  252.         dc.b    157,152,147,142,136,131,126,120,115,109,103,97
  253.         dc.b    92,86,80,74,68,62,56,49,43,37,31,25,18,12,6
  254.  
  255. ;------------------------------------------------------------------------
  256.  
  257. ; d0-d2    :    (x,y,z)
  258. ; d3    :    reserved
  259.  
  260. PROJECTION:    move.w    #K,d3
  261.         addi.w    #D,d2            ; z+D
  262.         ble.s    PROJECTION1
  263.         muls    d3,d0            ; x*K
  264.         muls    d3,d1            ; y*K
  265.         divs    d2,d0            ; x' = x*K / z+D
  266.         divs    d2,d1            ; y' = y*K / z+D
  267.         addi.w    #Xc,d0
  268.         addi.w    #Yc,d1
  269. PROJECTION1:    rts
  270.  
  271. ;------------------------------------------------------------------------
  272.  
  273. CUBE:        addq.b    #1,Alpha-DATA(a5)
  274.         addq.b    #2,Beta-DATA(a5)
  275.         subq.b    #1,Gamma-DATA(a5)
  276.  
  277.         movem.w    Palette-DATA(a5),d1/d2/d4
  278.         moveq    #$0,d0
  279.         move.l    d2,d3
  280.         move.l    d4,d5
  281.         move.l    d4,d6
  282.         move.l    d4,d7
  283.         movem.w    d0-d7,$180(a6)
  284.  
  285.         lea    COORDS(pc),a1
  286.         lea    Points-DATA(a5),a2
  287.         move.l    a2,a3
  288.         lea    Z-DATA(a5),a4
  289.         moveq    #7,d7
  290. CUBE1:        move.b (a1)+,d0
  291.         move.b (a1)+,d1
  292.         move.b (a1)+,d2
  293.         ext.w    d0
  294.         ext.w    d1
  295.         ext.w    d2
  296.         bsr    ROTATION
  297.         move.l    d2,(a4)+
  298.         bsr.s    PROJECTION
  299.         movem.w    d0/d1,(a2)
  300.         addq.w    #4,a2
  301.         dbf    d7,CUBE1
  302.  
  303.         pea    Palette-DATA(a5)
  304.  
  305.         lea    FACES(pc),a1
  306.         move.l    (a5),a4
  307.         moveq    #%01010100,d7
  308.     
  309. CUBE2:        lea    Buffer-DATA(a5),a0
  310.         move.l    a0,a2
  311.         moveq    #0,d0
  312.         moveq    #4-1,d1
  313. CUBE3:        move.b    (a1)+,d0
  314.         move.l    (a3,d0.w),(a0)
  315.         addq.w    #4,a0
  316.         dbf    d1,CUBE3
  317.         move.l    (a2),(a0)
  318.  
  319.         movem.w    (a2),d0-d5
  320.         sub.w    d0,d2            ; x2-x1
  321.         sub.w    d0,d4            ; x3-x1
  322.         sub.w    d1,d3            ; y2-y1
  323.         sub.w    d1,d5            ; y3-y1
  324.         muls    d5,d2            ; (y3-y1)*(x2-x1)
  325.         muls    d4,d3            ; (x3-x1)*(y2-y1)
  326.         sub.l    d2,d3
  327.         ble.s    CUBE6
  328.  
  329.         lea    Z-DATA(a5),a0
  330.         moveq    #0,d2
  331.         move.b    -1(a1),d2
  332.         move.l    (a0,d2.w),d0
  333.         move.b    -3(a1),d2
  334.         move.l    (a0,d2.w),d1
  335.         add.w    d1,d0
  336.         bge.s    CUBE4
  337.         neg.w    d0
  338. CUBE4:        lsr.w    #4,d0
  339.         move.l    (sp),a0
  340.         move.w    d0,(a0)
  341.     
  342.         bsr    LINEINIT
  343.         moveq    #4-1,d6
  344. CUBE5:        movem.w    (a2),d0-d3
  345.         move.l    a4,a0
  346.         bsr    LINEDRAW
  347.         addq.w    #4,a2
  348.         dbf    d6,CUBE5
  349.  
  350. CUBE6:        add.b    d7,d7
  351.         bcc.s    CUBE7
  352.         addq.l    #2,(sp)
  353.         add.w    #SIZE,a4
  354. CUBE7:        tst.b    d7
  355.         bne    CUBE2
  356.         addq.l    #4,sp
  357.         rts
  358.  
  359. ;------------------------------------------------------------------------
  360.  
  361. COPPER:        dc.w    $008e
  362.         dc.b    BEGIN
  363.         dc.b    $d1
  364.         dc.w    $0090
  365.         dc.b    BEGIN + HIGH
  366.         dc.b    $71
  367.         dc.w    $0092,$0060
  368.         dc.w    $0094,$00a8
  369.         dc.w    $00e0,BASE
  370.         dc.w    $00e4,BASE
  371.         dc.w    $00e8,BASE
  372.         dc.w    $00e2
  373. LIST:        dc.w    BPL1
  374.         dc.w    $00e6,BPL2
  375.         dc.w    $00ea,BPL3
  376.         dc.w    $0100,$3000
  377.         dc.l    -2
  378.  
  379. COORDS:        dc.b     C, C, C
  380.         dc.b     C,-C, C
  381.         dc.b     C,-C,-C
  382.         dc.b     C, C,-C
  383.         dc.b    -C, C, C
  384.         dc.b    -C,-C, C
  385.         dc.b    -C,-C,-C
  386.         dc.b    -C, C,-C
  387.  
  388. FACES:        dc.b    0,4,8,12
  389.         dc.b    20,16,28,24
  390.         dc.b    0,12,28,16
  391.         dc.b    8,4,20,24
  392.         dc.b    0,16,20,4
  393.         dc.b    28,12,8,24
  394.  
  395.         dc.b    '*'
  396. GFX:        dc.b    "graph"
  397. DOS:        dc.b    "ics.library",0
  398.         dc.b    169,"sep92 Z-One"
  399. x:
  400. ;------------------------------------------------------------------------
  401.  
  402. org DATA
  403. load DATA
  404. Screen:        dc.l    0
  405.  
  406. Palette:    dc.w    0
  407.         dc.w    0
  408.         dc.w    0
  409.  
  410. Z:        dc.l    0
  411.         dc.l    0
  412.         dc.l    0
  413.         dc.l    0
  414.         dc.l    0
  415.         dc.l    0
  416.         dc.l    0
  417.         dc.l    0
  418.  
  419. Points:        dc.l    0
  420.         dc.l    0
  421.         dc.l    0
  422.         dc.l    0
  423.         dc.l    0
  424.         dc.l    0
  425.         dc.l    0
  426.         dc.l    0
  427.  
  428. Buffer:        dc.l    0
  429.         dc.l    0
  430.         dc.l    0
  431.         dc.l    0
  432.         dc.l    0
  433.  
  434. Alpha:        dc.b    0
  435. Beta:        dc.b    0
  436. Gamma:        dc.b    0
  437.